#pragma once

#define MACCHINE 3
#define MODELLOLEN 15
#define RANDMIN 1000
#define RANDMAX 5500
#define MULT 3.14
#define TERM 1

typedef struct
{
	char modello[MODELLOLEN + TERM];
	int cilindrata;
	int prezzo;
	bool venduta;
}VEICOLO;

void menu();
void inserisci(VEICOLO *macchina, int *index);
void visualizza(VEICOLO macchina);
void ordina(VEICOLO concessionaria[], int index);
void visualizza_tutto(VEICOLO concessionaria[], int index);
void sommaprezzo(VEICOLO concessionaria[], int index);
void vendi(VEICOLO concessionaria[], int index);
void cilindrata_sopra(VEICOLO concessionaria[], int index);
void cilindrata_sotto(VEICOLO concessionaria[], int index);
void inserisci_tutto(VEICOLO concessionaria[], int *index);

void menu()
{
	int index = 0;
	VEICOLO concessionaria[MACCHINE];
	int scelta;
	do
	{
		system("cls");
		printf("0) Esci\n");
		printf("1) Inserimento nuovo veicolo\n");
		printf("2) Visualizzazione veicoli\n");
		printf("3) Ordinare per modello i veicoli presenti\n");
		printf("4) Valore attuale del mio concessionario(somma dei prezzi)\n");
		printf("5) Eliminare(vendere) un veicolo se presente\n");
		printf("6) Visualizzare tutti i veicoli sotto / sopra una determinata cilindrata\n");
		scanf_s("%d", &scelta, sizeof(int));
		switch (scelta)
		{
		case 1:
			inserisci_tutto(concessionaria, &index);
			break;
		case 2:
			visualizza_tutto(concessionaria, index);
			break;
		case 3:
			ordina(concessionaria, index);
			break;
		case 4:
			sommaprezzo(concessionaria, index);
			break;
		case 5:
			vendi(concessionaria, index);
			break;
		case 6:
			cilindrata_sopra(concessionaria, index);
			break;
		}
	} while (scelta != 0);
}

void inserisci(VEICOLO *macchina, int *index)
{
	if (*index<MACCHINE)
	{
		printf("Inserisci modello elemento %d\n", *index + 1);
		scanf_s("%s", macchina->modello, MODELLOLEN + TERM);
		macchina->cilindrata = RANDMIN + rand() % RANDMAX;
		macchina->prezzo = (int) ((macchina->cilindrata)*MULT);
		macchina->venduta = false;
		*index += 1;
	}
}

void visualizza(VEICOLO macchina)
{
	if(macchina.venduta!=true)
	{
	printf("Modello: %s\n", macchina.modello);
	printf("Cilindrata: %d\n", macchina.cilindrata);
	printf("Prezzo: %d\n", macchina.prezzo);
	printf("\n");
	}
}

void ordina(VEICOLO concessionaria[], int index)
{
	VEICOLO temp;
	for (int j = 0; j<index; j++)
	{
		for (int i = 0; i<index; i++)
		{
			if (strcmp(concessionaria[j].modello, concessionaria[i].modello)<0)
			{
				temp = concessionaria[j];
				concessionaria[j] = concessionaria[i];
				concessionaria[i] = temp;
			}
		}
	}
}

void visualizza_tutto(VEICOLO concessionaria[], int index)
{
	for (int i = 0; i<index; i++)
	{
		visualizza(concessionaria[i]);
	}
	system("pause");
}

void sommaprezzo(VEICOLO concessionaria[], int index)
{
	int somma = 0;
	for (int j = 0; j < index; j++)
	{
		somma = somma + concessionaria[j].prezzo;
	}
	printf("Il valore della mia concessionaria è %d Euro\n", somma);
	system("pause");
}

void vendi(VEICOLO concessionaria[], int index)
{
	int pos;
	do
	{
		printf("Inserisci la posizione dell'automobile da vendere\n");
		scanf_s("%d", &pos, sizeof(int));
	} while (pos > index);
	concessionaria[pos].prezzo = 0;
	concessionaria[pos].venduta = true;
}

void cilindrata_sopra(VEICOLO concessionaria[], int index)
{
	int ncl;
	printf("Inserisci cilindrata:\n");
	scanf_s("%d", &ncl, sizeof(int));
	for (int j = 0; j < index; j++)
	{
		if (concessionaria[j].cilindrata > ncl)
		{
			visualizza(concessionaria[j]);
		}
	}
	system("pause");
}

void cilindrata_sotto(VEICOLO concessionaria[], int index)
{
	int ncl;
	printf("Inserisci cilindrata:\n");
	scanf_s("%d", &ncl, sizeof(int));
	if (ncl >= 0)
	{
		for (int j = 0; j < index; j++)
		{
			if (concessionaria[j].cilindrata < ncl)
			{
				visualizza(concessionaria[j]);
			}
		}
	}
	system("pause");
}

void inserisci_tutto(VEICOLO concessionaria[], int *index)
{
	for (int j = 0; j<MACCHINE; j++)
	{
		inserisci(&concessionaria[j], index);
	}
}